import moment from 'moment';
import { isNumber } from './is';

/** 当前年 */
export function currentYear() {
  return moment().year();
}

/** 当前月 */
export function currentMonth() {
  return moment().format('MM');
}

/** 当前日 */
export function currentDay() {
  return moment().format('DD');
}

/** 当前季度 */
export function currentQuarter() {
  return moment().quarter();
}

/** 当前周 */
export function currentWeek() {
  return moment().week();
}

/**
 * 年份区间
 * @param current {number} 当前年
 * @param positive {number} 正
 * @param negative {number} 负
 * @returns arr
 */
export function intervalYear(current: number, positive = 100, negative = 100) {
  const arr: object[] = [];
  for (let i = negative; i > 0; i--) {
    arr.push({ name: current - i });
  }
  arr.push({ name: current });
  for (let i = 1; i <= positive; i++) {
    arr.push({ name: current + i });
  }
  return arr;
}

/**
 * 某年某月的天数数组
 * @param year 年份
 * @param month 月份
 * @returns 天数数组
 */
export function daysInMonth(year: number | string, month: number | string) {
  const date = year + '-' + month;
  const days = moment(date, 'YYYY-MM').daysInMonth();
  const arr: object[] = [];
  for (let i = 1; i <= days; i++) {
    arr.push({ name: i });
  }
  return arr;
}

/**
 * 补零
 * @param num 数值
 * @returns res
 */
export function fillZero(num: number | string) {
  if (isNumber(num)) {
    return num < 10 ? '0' + num : num;
  }
  return Number(num) < 10 ? '0' + num : num;
}

/**
 *
 * @param dateTime
 * @param format YYYY-MM-DD HH:mm:ss
 * @returns 返回格式化后的时间字符串
 */
export function dateFormat(dateTime: any = null, format = 'YYYY-MM-DD') {
  let date;
  // 若传入时间为假值，则取当前时间
  if (!dateTime) {
    return '';
  }
  // 若为unix秒时间戳，则转为毫秒时间戳（逻辑有点奇怪，但不敢改，以保证历史兼容）
  else if (/^\d{10}$/.test(dateTime?.toString().trim())) {
    date = new Date(dateTime * 1000);
  }
  // 若用户传入字符串格式时间戳，new Date无法解析，需做兼容
  else if (typeof dateTime === 'string' && /^\d+$/.test(dateTime.trim())) {
    date = new Date(Number(dateTime));
  }
  // 处理平台性差异，在Safari/Webkit中，new Date仅支持/作为分割符的字符串时间
  // 处理 '2022-07-10 01:02:03'，跳过 '2022-07-10T01:02:03'
  else if (typeof dateTime === 'string' && dateTime.includes('-') && !dateTime.includes('T')) {
    date = new Date(dateTime.replace(/-/g, '/'));
  }
  // 其他都认为符合 RFC 2822 规范
  else {
    date = new Date(dateTime);
  }
  return moment(date).format(format);
}
